package net.kts.subskill.alarm;

import java.util.Calendar;
import java.util.GregorianCalendar;

import net.kts.main.R;
import net.kts.transrate.TranslateService;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.DatePicker.OnDateChangedListener;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.TimePicker.OnTimeChangedListener;
import android.widget.Toast;

public class Alarm extends Activity implements OnDateChangedListener, OnTimeChangedListener{
	/** Called when the activity is first created. */
	// 알람 매니저 
	private AlarmManager mManager;
	// 설정 일시
	private GregorianCalendar mCalendar;
	// 일자 설정 클래스
	private DatePicker mDate;
	// 시각 설정 클래스
	private TimePicker mTime;
	// 현재 날짜
	private long nowTime;
	// 통지 관련 멤버 변수
	private NotificationManager mNotification;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.alarm);

		// 안내말 세팅
		String memo = "Please reconfirm airline tickets.";
		String resultMemo = TranslateService.translateRepository(memo);
		if(resultMemo == null || resultMemo.equals("")){
			Log.i("log333", "번역시 널 돌아옴.");
		}else{
			TextView memoView = (TextView) findViewById(R.id.airport_memo);
			memoView.setText(resultMemo);
		}

		// 통지 관련 매니저 취득
		mNotification = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
		// 알람 매니저를 취득
		mManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
		// 현재 시각을 취득
		mCalendar = new GregorianCalendar();
		Log.i("log333", mCalendar.getTime().toString());
		nowTime = mCalendar.getTimeInMillis();

		// 셋 버튼, 리셋 버튼의 리스너 등록

		Button b = (Button) findViewById(R.id.set);
		String set = TranslateService.translateRepository("설정");
		if(set == null){
			// 번역 실패
		}else if(set.trim().equals("")){
			// 번역 실패
		}else{
			b.setText(set);
		}

		b.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				setAlarm();
			}
		});

		String reset = TranslateService.translateRepository("해제"); 
		if(reset == null){

		}else if(reset.trim().equals("")){

		}else{
			b = (Button) findViewById(R.id.reset);
			b.setText(reset);
			b.setOnClickListener(new View.OnClickListener() {

				@Override
				public void onClick(View v) {
					// TODO Auto-generated method stub
					resetAlarm();
				}
			});
		}

		// 일시 설정 클래스로 현재 시각을 설정
		mDate = (DatePicker) findViewById(R.id.date_picker);
		mDate.init(mCalendar.get(Calendar.YEAR), mCalendar.get(Calendar.MONTH), mCalendar.get(Calendar.DAY_OF_MONTH), this);
		mTime = (TimePicker) findViewById(R.id.time_picker);
		mTime.setCurrentHour(mCalendar.get(Calendar.HOUR_OF_DAY));
		mTime.setCurrentMinute(mCalendar.get(Calendar.MINUTE));
		mTime.setOnTimeChangedListener(this);
	}

	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
	}

	// 알람의 해제
	protected void resetAlarm() {
		// TODO Auto-generated method stub
		mNotification.cancel(1);
		mManager.cancel(pendingIntent());
	}

	// 알람 설정 
	protected void setAlarm() {
		// TODO Auto-generated method stub
		Log.i("log333", "setAlarm()");

		// 유효성 검사
		if(nowTime >= mCalendar.getTimeInMillis()){
			Toast.makeText(Alarm.this, " 입력한 날짜는 현재 날짜보다 이전입니다.", Toast.LENGTH_SHORT).show();
			return;
		}

		Log.i("log333", "알람설정 설정 시간 : " + mCalendar.getTimeInMillis() + "");

		// 알람 매니저에 등록할 인텐트
		Intent intent = new Intent(getApplicationContext(), AlarmReceiver.class);
		PendingIntent sender = PendingIntent.getBroadcast(Alarm.this, 0, intent, 0);

		// 알람 받을 시간 설정
		Calendar calendar = Calendar.getInstance();  
		calendar.setTimeInMillis(System.currentTimeMillis());  
		calendar.add(Calendar.SECOND, 0); // 0초 뒤에 발생..

		// 알람 매니저에 알람을 등록
		AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
		// 딱 한번 울리게
		am.set(AlarmManager.RTC_WAKEUP, mCalendar.getTimeInMillis(), sender);
		
		mManager.set(AlarmManager.RTC_WAKEUP, mCalendar.getTimeInMillis(), pendingIntent());
		
	}

	// 알람의 설정 시각에 발생하는 인텐트 작성
	// test결과 알람 해제시 소리가 남.
	private PendingIntent pendingIntent() {
		// TODO Auto-generated method stub
		Log.i("log333", "pendingIntent()");
		Intent i = new Intent(getApplicationContext(), Alarm.class);
		PendingIntent pi = PendingIntent.getActivity(this, 0, i, 0);
		return pi;
	}

	// 시각 설정 클래스의 상태변화 리스너 
	@Override
	public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
		// TODO Auto-generated method stub
		mCalendar.set(mDate.getYear(), mDate.getMonth(), mDate.getDayOfMonth(), hourOfDay, minute);
		Log.i("log333", mCalendar.getTime().toString());
	}

	// 일자 설정 클래스의 상태변화 리스너 
	@Override
	public void onDateChanged(DatePicker view, int year, int monthOfYear,
			int dayOfMonth) {
		// TODO Auto-generated method stub
		mCalendar.set(year, monthOfYear, dayOfMonth, mTime.getCurrentHour(), mTime.getCurrentMinute());
		Log.i("log333", mCalendar.getTime().toString());
	}
}